#pragma once
#include "common.h" // comparators
#include "ItemInfo.h"
#include "SkillInfo.h"
#include "Struct.h"
#include "Base/Xml.h"


class CSession
{
	/* this+0x0    */ public: int m_curMapType;
	/* this+0x4    */ public: int m_mapInfoTable[11][10];
	/* this+0x1BC  */ public: mystd::list<SKILL_INFO> m_skillInfoList;
	/* this+0x1C8  */ public: mystd::list<SKILL_INFO> m_guildSkillList;
	/* this+0x1D4  */ public: mystd::list<SKILL_INFO> m_tempSkillList;
	/* this+0x1E0  */ public: unsigned char m_shortcutSlotCnt;
	/* this+0x1E4  */ public: mystd::string m_shortenItemName[27];
	/* this+0x394  */ public: int m_shortenSkillUseLevel[27];
	/* this+0x400  */ public: mystd::vector< mystd::pair< mystd::string, mystd::vector<int> > > m_skillAfterDelayTable;
	/* this+0x410  */ public: mystd::vector<int> m_skillUseLevelList;
	/* this+0x420  */ public: mystd::vector<int> m_skillAttackEffectIdTable;
	/* this+0x430  */ public: mystd::vector<int> m_skillAttackedEffectIdTable;
	/* this+0x440  */ public: mystd::vector<int> m_guildSkillUseLevelList;
	/* this+0x450  */ public: unsigned long m_targetGID;
	/* this+0x454  */ public: mystd::vector<CHAT_PROHIBIT_LOG> m_chatProhibitLog;
	/* this+0x464  */ public: mystd::vector<REQ_ACCOUNT_AID> m_recievedAccountName;
	/* this+0x474  */ public: mystd::vector<REQ_ACCOUNTNAME_INFO> m_reqAccountInfo;
	/* this+0x484  */ public: mystd::string m_selectedServerName;
	/* this+0x494  */ public: mystd::vector<FORCE_ANIM_TICK> m_forceAnimEndTick;
	/* this+0x4A4  */ public: int m_diffTime;
	/* this+0x4A8  */ public: char m_curMap[20];
	/* this+0x4BC  */ public: int m_numLatePacket;
	/* this+0x4C0  */ public: int m_showType;
	/* this+0x4C4  */ public: unsigned long m_averagePingTime;
	/* this+0x4C8  */ public: int m_isShowTime;
	/* this+0x4CC  */ public: int m_isNeverDie;
	/* this+0x4D0  */ public: unsigned long m_showDigitTick;
	/* this+0x4D4  */ public: unsigned long m_killTimeStartTick;
	/* this+0x4D8  */ public: char m_cName[64];
	/* this+0x518  */ public: char m_aName[64];
	/* this+0x558  */ public: int m_sex;
	/* this+0x55C  */ public: int m_charNum;
	/* this+0x560  */ public: int m_authCode;
	/* this+0x564  */ public: unsigned long m_userLevel;
	/* this+0x568  */ public: unsigned long m_lastLoginIP;
	/* this+0x56C  */ public: char m_lastLoginTime[28];
	/* this+0x588  */ public: int m_mkcount;
	/* this+0x58C  */ public: int m_haircolor;
	/* this+0x590  */ public: int m_deadcount;
	/* this+0x594  */ public: int m_head;
	/* this+0x598  */ public: int m_weapon;
	/* this+0x59C  */ public: int m_shield;
	/* this+0x5A0  */ public: int m_accessory;
	/* this+0x5A4  */ public: int m_accessory2;
	/* this+0x5A8  */ public: int m_accessory3;
	/* this+0x5AC  */ public: int m_bodyPalette;
	/* this+0x5B0  */ public: int m_headPalette;
	/* this+0x5B4  */ public: int m_bodyState;
	/* this+0x5B8  */ public: int m_healthState;
	/* this+0x5BC  */ public: int m_effectState;
	/* this+0x5C0  */ public: int m_posX;
	/* this+0x5C4  */ public: int m_posY;
	/* this+0x5C8  */ public: int m_dir;
	/* this+0x5CC  */ public: int m_cartCurCount;
	/* this+0x5D0  */ public: int m_cartMaxCount;
	/* this+0x5D4  */ public: int m_cartCurWeight;
	/* this+0x5D8  */ public: int m_cartMaxWeight;
	/* this+0x5DC  */ public: int m_maxNumOfSellItemOfMerchant;
	/* this+0x5E0  */ public: int m_attackRange;
	/* this+0x5E4  */ public: int m_charSlot;
	/* this+0x5E8  */ public: int m_BgmVolume;
	/* this+0x5EC  */ public: float m_LoadingTime;
	/* this+0x5F0  */ public: int m_isShowWhisperWnd;
	/* this+0x5F4  */ public: int m_isPlayWhisperOpenSound;
	/* this+0x5F8  */ public: int m_isShowWhisperWnd_Friend;
	/* this+0x5FC  */ public: int m_isOpaque;
	/* this+0x600  */ public: int m_isItemSnap;
	/* this+0x604  */ public: int m_isShowGameOver;
	/* this+0x608  */ public: int m_monsterSnapOn_Skill;
	/* this+0x60C  */ public: int m_monsterSnapOn_NoSkill;
	/* this+0x610  */ public: int m_isShowTeamGravityPlanetLogo;
	/* this+0x614  */ public: mystd::vector<const char*> m_newPcJobNameTable;
	/* this+0x624  */ public: mystd::vector<const char*> m_newPcSexNameTable;
	/* this+0x634  */ public: mystd::vector<const char*> m_newPcHeadNameTable_M;
	/* this+0x644  */ public: mystd::vector<const char*> m_newPcHeadNameTable_F;
	/* this+0x654  */ public: mystd::vector<const char*> m_newPcJobImfNameTable;
	/* this+0x664  */ public: mystd::vector<const char*> m_newAccessoryNameTable;
	/* this+0x674  */ public: mystd::vector<const char*> m_pcJobNameTable;
	/* this+0x684  */ public: mystd::vector<const char*> m_pcSexNameTable;
	/* this+0x694  */ public: mystd::vector<const char*> m_pcHeadNameTable;
	/* this+0x6A4  */ public: mystd::vector<const char*> m_pcWeaponNameTable;
	/* this+0x6B4  */ public: mystd::vector<const char*> m_accessoryNameTable;
	/* this+0x6C4  */ public: mystd::vector<const char*> m_pcSexImfNameTable;
	/* this+0x6D4  */ public: mystd::vector<const char*> m_pcHeadImfNameTable;
	/* this+0x6E4  */ public: mystd::vector<const char*> m_jobNameTable;
	/* this+0x6F4  */ public: mystd::vector<const char*> m_sexNameTable;
	/* this+0x704  */ public: mystd::vector<const char*> m_headAccNameList;
	/* this+0x714  */ public: mystd::vector<const char*> m_shieldNameTable;
	/* this+0x724  */ public: mystd::list<unsigned long> m_pingTimeList;
	/* this+0x730  */ public: mystd::vector<const char*> m_palJobNameTable;
	/* this+0x740  */ public: mystd::vector<const char*> m_palHeadNameTable;
	/* this+0x750  */ public: mystd::vector<mystd::string> m_shortcutText;
	/* this+0x760  */ public: unsigned long m_petGID;
	/* this+0x764  */ public: int m_isPetNameModified;
	/* this+0x768  */ public: char m_petName[32];
	/* this+0x788  */ public: int m_petAcc;
	/* this+0x78C  */ public: int m_petJob;
	/* this+0x790  */ public: int m_petLevel;
	/* this+0x794  */ public: int m_petHungry;
	/* this+0x798  */ public: int m_petFriendly;
	/* this+0x79C  */ public: int m_petEggIndex;
	/* this+0x7A0  */ public: int m_petOldHungry;
	/* this+0x7A4  */ public: int m_petEmotionTable[5][5][7]; // [hungryState][friendlyState][action?]
	/* this+0xA60  */ public: mystd::string m_petTalkTable[5][5];
	/* this+0xBF0  */ public: XMLDocument m_petTalkXmlTable;
	/* this+0xC18  */ public: XMLDocument m_monsterSkillInfo;
	/* this+0xC40  */ public: XMLDocument m_monsterTalkTable;
	/* this+0xC68  */ public: int m_guildDealZeny;
	/* this+0xC6C  */ private: unsigned long m_aid;
	/* this+0xC70  */ private: unsigned long m_gid;
	/* this+0xC74  */ private: int m_isWeaponBow;
	/* this+0xC78  */ private: float m_oneCellDist;
	/* this+0xC7C  */ private: int m_job;
	/* this+0xC80  */ private: int m_exp;
	/* this+0xC84  */ private: int m_level;
	/* this+0xC88  */ private: int m_point;
	/* this+0xC8C  */ private: int m_nextexp;
	/* this+0xC90  */ private: int m_joblevel;
	/* this+0xC94  */ private: int m_skillPoint;
	/* this+0xC98  */ private: int m_guildSkillPoint;
	/* this+0xC9C  */ private: int m_str;
	/* this+0xCA0  */ private: int m_agi;
	/* this+0xCA4  */ private: int m_vit;
	/* this+0xCA8  */ private: int m_int;
	/* this+0xCAC  */ private: int m_dex;
	/* this+0xCB0  */ private: int m_luk;
	/* this+0xCB4  */ private: int m_plusStr;
	/* this+0xCB8  */ private: int m_plusAgi;
	/* this+0xCBC  */ private: int m_plusVit;
	/* this+0xCC0  */ private: int m_plusInt;
	/* this+0xCC4  */ private: int m_plusDex;
	/* this+0xCC8  */ private: int m_plusLuk;
	/* this+0xCCC  */ private: int m_standardStr;
	/* this+0xCD0  */ private: int m_standardAgi;
	/* this+0xCD4  */ private: int m_standardVit;
	/* this+0xCD8  */ private: int m_standardInt;
	/* this+0xCDC  */ private: int m_standardDex;
	/* this+0xCE0  */ private: int m_standardLuk;
	/* this+0xCE4  */ private: int m_ASPD;
	/* this+0xCE8  */ private: int m_attPower;
	/* this+0xCEC  */ private: int m_mdefPower;
	/* this+0xCF0  */ private: int m_plusASPD;
	/* this+0xCF4  */ private: int m_itemDefPower;
	/* this+0xCF8  */ private: int m_plusdefPower;
	/* this+0xCFC  */ private: int m_refiningPower;
	/* this+0xD00  */ private: int m_max_mattPower;
	/* this+0xD04  */ private: int m_min_mattPower;
	/* this+0xD08  */ private: int m_plusmdefPower;
	/* this+0xD0C  */ private: int m_hitSuccessValue;
	/* this+0xD10  */ private: int m_avoidSuccessValue;
	/* this+0xD14  */ private: int m_criticalSuccessValue;
	/* this+0xD18  */ private: int m_plusAvoidSuccessValue;
	/* this+0xD1C  */ private: int m_equipArrowIndex;
	/* this+0xD20  */ private: int m_gold;
	/* this+0xD24  */ private: int m_speed;
	/* this+0xD28  */ private: int m_honor;
	/* this+0xD2C  */ private: int m_jobexp;
	/* this+0xD30  */ private: int m_weight;
	/* this+0xD34  */ private: int m_virtue;
	/* this+0xD38  */ private: int m_maxWeight;
	/* this+0xD3C  */ private: int m_jobnextexp;
	/* this+0xD40  */ private: int m_isMonsterSnap;
	/* this+0xD44  */ private: int m_systemDiffTime;
	/* this+0xD48  */ private: mystd::list<ITEM_INFO> m_itemList;
	/* this+0xD54  */ private: mystd::list<ITEM_INFO> m_shopItemList;
	/* this+0xD60  */ private: mystd::list<ITEM_INFO> m_sellItemList;
	/* this+0xD6C  */ private: mystd::list<ITEM_INFO> m_storeItemList;
	/* this+0xD78  */ private: mystd::list<ITEM_INFO> m_merchantItemList;
	/* this+0xD84  */ private: mystd::list<ITEM_INFO> m_purchaseItemList;
	/* this+0xD90  */ private: mystd::list<ITEM_INFO> m_merchantShopItemList;
	/* this+0xD9C  */ private: mystd::list<ITEM_INFO> m_merchantMirrorItemList;
	/* this+0xDA8  */ private: mystd::list<ITEM_INFO> m_merchantMyShopItemList;
	/* this+0xDB4  */ private: mystd::list<ITEM_INFO> m_merchantPurchaseItemList;
	/* this+0xDC0  */ private: mystd::list<ITEM_INFO> m_merchantHopeToSellItemList;
	/* this+0xDCC  */ private: mystd::list<ITEM_INFO> m_merchantPurchaseItemSavedList;
	/* this+0xDD8  */ private: mystd::list<FRIEND_INFO> m_partyList;
	/* this+0xDE4  */ private: mystd::list<FRIEND_INFO> m_friendList;
	/* this+0xDF0  */ private: ITEM_INFO m_equipedItems[10];
	/* this+0x1098 */ private: ITEM_INFO m_exchangeItems[10];
	/* this+0x1340 */ private: ITEM_INFO m_otherExchangeItems[10];
	/* this+0x15E8 */ private: int m_myExchangeMoney;
	/* this+0x15EC */ private: int m_otherExchangeMoney;
	/* this+0x15F0 */ private: mystd::vector< mystd::pair<const char*, enum TALKTYPE> > m_talkTypeTable;
	/* this+0x1600 */ private: mystd::vector< mystd::pair<const char*, const char*> > m_mapNameTable;
	/* this+0x1610 */ private: mystd::vector< mystd::pair<const char*, const char*> > m_mp3NameTable;
	/* this+0x1620 */ private: mystd::vector< mystd::pair< mystd::string, mystd::vector<mystd::string> > > m_fogParameterTable;
	/* this+0x1630 */ private: mystd::vector<const char*> m_indoorRswTable;
	/* this+0x1640 */ private: mystd::vector<float> m_shadowFactorTable;
	/* this+0x1650 */ private: mystd::vector<mystd::string> m_msgStringTable;
	/* this+0x1660 */ private: mystd::vector<mystd::string> m_jobHitWaveNameTable;
	/* this+0x1670 */ private: mystd::vector<mystd::string> m_weaponHitWaveNameTable;
	/* this+0x1680 */ private: mystd::vector<mystd::string> m_weaponSwingWaveNameTable;
	/* this+0x1690 */ private: mystd::list<unsigned long> m_exAidList;
	/* this+0x169C */ private: mystd::list<mystd::string> m_exNameList;
	/* this+0x16A8 */ private: mystd::vector< mystd::pair<const char*,bool> > m_enableObjLightMapList;
	/* this+0x16B8 */ private: int m_hpIndex;
	/* this+0x16BC */ private: int m_spIndex;
	/* this+0x16C0 */ private: int m_xorIndex;
	/* this+0x16C4 */ private: int m_maxhpIndex;
	/* this+0x16C8 */ private: int m_maxspIndex;
	/* this+0x16CC */ private: int m_maxhp[12];
	/* this+0x16FC */ private: int m_maxsp[12];
	/* this+0x172C */ private: int m_hp[12];
	/* this+0x175C */ private: int m_sp[12];
	/* this+0x178C */ private: int m_xorValue[12];
	/* this+0x17BC */ private: CommonObject m_objParser;
	/* this+0x17CC */ public: int m_fogOn;
	/* this+0x17D0 */ public: int m_isAura;
	/* this+0x17D4 */ public: int m_isNoShift;
	/* this+0x17D8 */ public: int m_isNoCtrl;
	/* this+0x17DC */ public: int m_isSkillFail;
	/* this+0x17E0 */ public: int m_isQuickSpell;
	/* this+0x17E4 */ public: int m_isQuickSpell2;
	/* this+0x17E8 */ public: int m_isQ2begin;
	/* this+0x17EC */ public: int m_isNoTalkMsg;
	/* this+0x17F0 */ public: bool m_isShowNameTypeOld;
	/* this+0x17F4 */ public: int m_isEffectOn;
	/* this+0x17F8 */ public: int m_bgmIsPaused;
	/* this+0x17FC */ public: BOOL m_isMinEffect;
	/* this+0x1800 */ public: BOOL m_isMinEffectOld;
	/* this+0x1804 */ public: int m_amIPartyMaster;
	/* this+0x1808 */ public: int m_isAttrIndicator;
	/* this+0x180C */ public: int m_bMakeMissEffect;
	/* this+0x1810 */ public: int m_isLowSystemMemory;
	/* this+0x1814 */ public: int m_bAutoOpenDetailWindowIfLowMemory;
	/* this+0x1818 */ public: int m_isBattle;
	/* this+0x181C */ public: int m_isBmChat;
	/* this+0x1820 */ public: int m_isStartBmChat;
	/* this+0x1824 */ public: int m_talkType;
	/* this+0x1828 */ public: int m_langType;
	/* this+0x182C */ public: int m_expDivType;
	/* this+0x1830 */ public: int m_itemCollectType;
	/* this+0x1834 */ public: int m_itemDivType;
	/* this+0x1838 */ public: mystd::string m_partyRequestName;
	/* this+0x1848 */ public: mystd::string m_partyName;
	/* this+0x1858 */ public: mystd::string m_myShopName;
	/* this+0x1868 */ public: mystd::string m_accountPort;
	/* this+0x1878 */ public: mystd::string m_lastServerName;
	/* this+0x1888 */ public: mystd::string m_accountAddress;
	/* this+0x1898 */ public: mystd::string m_registrationUrl;
	/* this+0x18A8 */ public: bool m_emblemState;
	/* this+0x18AC */ public: int m_isSaveChat;
	/* this+0x18B0 */ public: int m_sexCheck;
	/* this+0x18B4 */ public: int m_cNameCheck;

	public: CSession::CSession(void);
	public: CSession::~CSession(void);
	public: void CSession::Init(void);
	public: void CSession::Create(void);
	public: void CSession::InitTable(void);
	public: void CSession::InitLanguageTable(void);
	public: void CSession::InitVariables(void);
	public: void CSession::InitPcNameTable(void);
	public: void CSession::InitJobNameTable(void);
	public: void CSession::InitTalkTypeTable(void);
	//public: void CSession::InitMapTypeInfoTable();
	//public: int CSession::IsSpace(char);
	//public: int CSession::IsEnablePK();
	//public: int CSession::IsEnableGomok();
	//public: int CSession::IsEnableMemory();
	//public: int CSession::IsEnableDropExp();
	//public: int CSession::IsEnableTeleport();
	//public: int CSession::IsEnableDropItem();
	//public: int CSession::IsEnableAllyParty();
	//public: int CSession::IsEnableAllyGuild();
	public: int CSession::IsEnableSiegeMode();
	//public: int CSession::IsEnableNeverMemory();
	public: int CSession::InitMapNameTable(void);
	public: int CSession::InitMp3NameTable(void);
	public: int CSession::InitIndoorRswTable(void);
	//public: int CSession::InitSystemInfoTable();
	public: int CSession::InitEnableObjLightMapTable(void);
	public: void CSession::RefreshSkillItemWnd(void);
	//public: void ClearSkillItem();
	//public: int GetSkillItemCount();
	public: bool CSession::AddSkillItem(SKILL_INFO& skillInfo, bool needRefresh);
	public: SKILL_INFO CSession::GetSkillItemInfoBySkillId(int id);
	public: SKILL_INFO CSession::GetSkillItemInfoBySequence(int sequence);
	public: SKILL_INFO CSession::GetSkillItemInfoByName(const char* skillName);
	//public: int CSession::GetGuildSkillUseLevel(int);
	//public: int GetGuildSkillPoint();
	//public: void ClearGuildSkillItem();
	//public: void CSession::SetGuildSkillUseLevel(int, int);
	//public: int GetGuildSkillItemCount();
	//public: unsigned char CSession::AddGuildSkillItem(struct SKILL_INFO &, unsigned char);
	//public: struct SKILL_INFO CSession::GetGuildSkillItemInfoBySequence(int);
	public: bool CSession::AddTempSkillItem(SKILL_INFO& skillInfo);
	public: SKILL_INFO CSession::GetTempSkillItemInfoBySkillId(int skillId);
	//public: void CSession::ClearShortenSkillUseLevel();
	public: int CSession::GetShortenSkillUseLevel(int slot);
	public: void CSession::SetShortenSkillUseLevel(int skillUseLevel, int slot);
	//public: void CSession::SetShortenSkillName(const char *, int, int);
	//public: void InitLevelUseSkillList();
	public: void CSession::InitSkillEffectIdTable(void);
	public: int CSession::InitSkillUseAfterDelayTable(void);
	//public: int CSession::GetSkillUseLevel(int);
	//public: int CSession::GetAttackEffectIdBySkillId(int);
	//public: int CSession::GetAttackedEffectIdBySkillId(int);
	//public: void CSession::SetSkillUseLevel(int, int);
	public: void CSession::GetSkillBitmapFileName(const char* itemName, char* buf);
	public: const char* CSession::GetItemSpriteFileName_Skill(const char* itemName);
	//public: class mystd::vector<int,std::allocator<int> > & LevelUseSkillSpAmountList(const char *, int &);
	//public: void CSession::GetSkillActionInfo(int, int &, int &);
	//public: void CSession::GetSkillActionInfo2(int, int &, int &, int);
	//public: void CSession::LaunchSkillSpecialEffect(int, int, class CGameActor *, class CGameActor *);
	//public: int CSession::IsAbracatabra(int);
	public: void CSession::InitWithClear(void);
	public: void CSession::InitJobHitWaveName(void);
	public: int CSession::InitFogParameterTable(void);
	public: void CSession::InitWeaponHitWaveName(void);
	public: void CSession::InitShadowFactorWithJob(void);
	public: void CSession::InitWeaponSwingWaveName(void);
	public: void CSession::WriteOptionToRegistry(void);
	public: void CSession::WriteExListToRegistry(void);
	public: void CSession::InitExListWithRegistry(void);
	public: void CSession::InitOptionWithRegistry(void);
	public: void CSession::InitWhenServerMove(void);
	//public: int CSession::GetHeadJob(int, int);
	//public: void CSession::CorrectHead(int &, int);
	public: unsigned long CSession::GetServerTime(void);
	//public: unsigned long CSession::GetCurSystemTime();
	public: void CSession::SetServerTime(unsigned long startTime);
	public: bool CSession::IsOnlyEnglish(const char* chat);
	public: void CSession::UpdateServerTime(unsigned long startTime);
	//public: void RecalcAverageDiffTime(int);
	public: void CSession::RecalcAveragePingTime(unsigned long pingTime);
	public: void CSession::SetPlayerPosDir(int x, int y, int dir);
	public: bool CSession::IsBadNameWithSpaceChar(const char* chat);
	//public: void CSession::SetPlayerInfo(int, int, char *, int);
	public: int CSession::GetTalkType(const char* chatBuf, TALKTYPE* talkType, mystd::string param[3]);
	public: void CSession::ClearPlusValue(void);
	//public: void CSession::ClearShortenItemName();
	//public: int GetDistByNumCell(int);
	public: const char* CSession::RemoveUnderbar(const char* msg, char* buf);
	//public: int CSession::NumExName();
	public: void CSession::DeleteAllExNameList(void);
	public: BOOL CSession::IsExName(const char* exName);
	public: void CSession::AddToExNameList(const char* exName);
	public: void CSession::DeleteFromExNameList(const char* exName);
	//public: int CSession::NumExAid();
	public: int CSession::IsExAid(unsigned long aid);
	public: void CSession::DeleteAllExAidList(void);
	public: void CSession::AddToExAidList(unsigned long aid);
	public: void CSession::DeleteFromExAidList(unsigned long aid);
	public: mystd::list<mystd::string>& CSession::GetNumExNameList(void);
	public: const char* CSession::GetAttrWaveName(int attr);
	public: const char* CSession::GetJobHitWaveName(int job);
	public: const char* CSession::GetMp3Name(const char* rswName);
	public: const char* CSession::GetMapName(const char* rswName);
	public: const char* CSession::GetWeaponHitWaveName(int weapon);
	public: const char* CSession::GetWeaponSwingWaveName(int weapon);
	public: const char* CSession::GatName2RswName(const char* gatName);
	public: const char* CSession::GetItemSpriteFileName(const char* itemName, int isIdentified);
	public: bool CSession::IsIndoorRswName(const char* rswName);
	public: bool CSession::IsEnableObjLightMap(const char* rswName);
	//public: class mystd::vector<mystd::string> & CSession::GetFogParameter(const char *, int &);
	//public: void CSession::GetItemBitmapFileName(const char *, char *, int);
	public: int CSession::GetNumItem(void);
	public: bool CSession::IsVisibleNPC(JOBTYPE jobType);
	public: ITEM_INFO CSession::GetItemInfoById(int id);
	public: ITEM_INFO CSession::GetItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetItemInfoBySequence(int sequence);
	public: char* CSession::GetJobActName(int job, int sex, char* buf);
	public: char* CSession::GetJobSprName(int job, int sex, char* buf);
	//public: char * CSession::GetJobDyeActName(int, int, char *);
	//public: char * CSession::GetJobDyeSprName(int, int, char *);
	public: char* CSession::GetImfName(int job, int head, int sex, char* buf);
	public: char* CSession::GetHeadActName(int job, int& head, int sex, char* buf);
	public: char* CSession::GetHeadSprName(int job, int& head, int sex, char* buf);
	public: char* CSession::GetShieldActName(int job, int sex, int shield, char* buf);
	public: char* CSession::GetShieldSprName(int job, int sex, int shield, char* buf);
	public: char* CSession::GetAccessoryActName(int job, int& head, int sex, int accessory, char* buf);
	public: char* CSession::GetAccessorySprName(int job, int& head, int sex, int accessory, char* buf);
	//public: const char * CSession::GetItemName(int);
	public: void CSession::SetItem(ITEM_INFO* itemInfo);
	public: bool CSession::AddItem(ITEM_INFO* itemInfo);
	public: void CSession::DecItem(unsigned long index, int numItem);
	public: bool CSession::AddEquipItem(ITEM_INFO* itemInfo);
	public: bool CSession::AddItemNoRefresh(ITEM_INFO* itemInfo);
	public: bool CSession::IsValidItemIndexInEquiped(int itemIndex);
	//public: unsigned char AddItemWithNoRefresh(struct ITEM_INFO *);
	public: bool CSession::IsValidItemIndexInUnequiped(int itemIndex);
	public: bool CSession::MoveItemFromEquipWndToItemWnd(int wearLocation);
	public: void CSession::BitMaskToSlotNum(int wearLocation, int* slotNum);
	//public: unsigned char CSession::MoveItemFromItemWndToEquipWnd(struct ITEM_INFO *);
	public: void CSession::ClearItem(void);
	public: void CSession::ClearShopItem(void);
	public: void CSession::ClearDealItems(void);
	public: void CSession::ClearEquipItem(void);
	//public: void CSession::ClearMerchantDealItems();
	public: void CSession::ClearEquipItemInInventory(void);
	//public: void CSession::ClearAntiEquipItemInInventory();
	//public: void CSession::ClearMerchantShopItem();
	public: void CSession::ClearMerchantMyShopItem(void);
	//public: int CSession::GetNumShopItem();
	//public: int CSession::GetShopItemNum(int);
	//public: void CSession::DecShopItem(struct ITEM_INFO &);
	//public: unsigned char CSession::IsExistInShopItemList(int);
	//public: struct ITEM_INFO CSession::GetShopItemInfoBySequence(int);
	//public: void CSession::AddShopItemFromSell(struct ITEM_INFO &);
	//public: void CSession::AddShopItem(struct SHOP_ITEM &, int);
	public: int CSession::GetNumMerchantShopItem(void);
	//public: int CSession::GetMerchantShopItemNum(int);
	//public: void CSession::AddMerchantShopItem(struct ITEM_INFO &);
	//public: void CSession::DecMerchantShopItem(struct ITEM_INFO &);
	public: ITEM_INFO CSession::GetMerchantShopItemInfoBySequence(int sequence);
	//public: int CSession::GetNumMerchantMyShopItem();
	//public: int CSession::GetMerchantMyShopItemNum(int);
	//public: void CSession::AddMerchantMyShopItem(struct ITEM_INFO &);
	//public: void CSession::DecMerchantMyShopItem(struct ITEM_INFO &);
	//public: unsigned char CSession::IsExistInMerchantMyShopItemList(int);
	//public: struct ITEM_INFO CSession::GetMerchantMyShopItemInfoBySequence(int);
	public: void CSession::ClearPurchaseItem(void);
	public: int CSession::GetNumPurchaseItem(void);
	public: int CSession::GetPurchaseItemTotalPrice(void);
	//public: void CSession::AddPurchaseItem(struct ITEM_INFO &);
	//public: void CSession::DecPurchaseItem(struct ITEM_INFO &);
	//public: int CSession::GetPurchaseItemNum(const char *);
	public: ITEM_INFO CSession::GetPurchaseItemInfoBySequence(int sequence);
	public: ITEM_INFO CSession::GetPurchaseItemInfoByName(const char* itemName);
	public: void CSession::ClearMerchantPurchaseItem(void);
	public: int CSession::GetNumMerchantPurchaseItem(void);
	//public: int CSession::GetMerchantPurchaseItemTotalPrice();
	//public: struct ITEM_INFO CSession::GetMerchantPurchaseItemSaved(int);
	//public: int CSession::GetMerchantPurchaseItemNumByIndex(int);
	public: void CSession::AddMerchantPurchaseItem(ITEM_INFO& itemInfo);
	public: void CSession::DecMerchantPurchaseItem(ITEM_INFO& itemInfo);
	//public: int CSession::GetMerchantPurchaseItemNum(const char *);
	public: ITEM_INFO CSession::GetMerchantPurchaseItemInfoBySequence(int sequence);
	public: void CSession::CloneMerchantPurchaseItemToMerchantPurchaseItemSaved(void);
	public: ITEM_INFO CSession::GetMerchantPurchaseItemInfoByName(const char* itemName);
	public: void CSession::ClearSellItem(void);
	public: int CSession::GetNumSellItem(void);
	public: int CSession::IsSellItemValid(void);
	//public: int CSession::GetSellItemNum(int);
	public: void CSession::AddSellItem(ITEM_INFO& itemInfo);
	public: void CSession::DecSellItem(ITEM_INFO& itemInfo);
	public: ITEM_INFO CSession::GetSellItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetSellItemInfoBySequence(int sequence);
	public: void CSession::ClearStoreItem(void);
	public: int CSession::GetNumStoreItem();
	public: void CSession::RefreshStoreItemWnd();
	//public: int CSession::GetStoreItemNum(int);
	public: bool CSession::AddStoreItem(ITEM_INFO& itemInfo);
	public: bool CSession::DecStoreItem(ITEM_INFO& itemInfo);
	public: ITEM_INFO CSession::GetStoreItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetStoreItemInfoBySequence(int sequence);
	public: void CSession::ClearMerchantItem(void);
	//public: int CSession::GetNumMerchantItem();
	//public: void CSession::RefreshMerchantItemWnd();
	//public: int CSession::GetMerchantItemNum(int);
	//public: unsigned char CSession::AddMerchantItem(struct ITEM_INFO &);
	//public: unsigned char CSession::DecMerchantItem(struct ITEM_INFO &);
	public: ITEM_INFO CSession::GetMerchantItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetMerchantItemInfoBySequence(int sequence);
	public: void CSession::ClearMerchantMirrorItem(void);
	//public: int CSession::GetNumMerchantMirrorItem();
	//public: void CSession::RefreshMerchantMirrorItemWnd();
	//public: int CSession::GetMerchantMirrorItemNum(int);
	//public: void CSession::CloneMerchantItemToMerchantMirrorItem();
	public: bool CSession::AddMerchantMirrorItem(ITEM_INFO& itemInfo);
	public: bool CSession::DecMerchantMirrorItem(ITEM_INFO& itemInfo);
	public: ITEM_INFO CSession::GetMerchantMirrorItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetMerchantMirrorItemInfoBySequence(int sequence);
	//public: void CSession::RefreshMerchantShopMakeWnd();
	public: void CSession::ClearMerchantHopeToSellItem(void);
	public: int CSession::GetNumMerchantHopeToSellItem(void);
	public: int CSession::GetMerchantHopeToSellItemNum(int itemIndex);
	public: bool CSession::AddMerchantHopeToSellItem(ITEM_INFO& itemInfo);
	public: bool CSession::DecMerchantHopeToSellItem(ITEM_INFO& itemInfo);
	public: ITEM_INFO CSession::GetMerchantHopeToSellItemInfoByIndex(int index);
	public: ITEM_INFO CSession::GetMerchantHopeToSellItemInfoBySequence(int sequence);
	public: void CSession::SetMerchantHopeToSellItemPrice(int sequence, int price);
	public: void CSession::ClearExchangeItemList(void);
	public: int CSession::IsExchangeItemListFull(void);
	public: int CSession::GetFilledExchangeItemList(void);
	public: void CSession::AddToExchangeList(ITEM_INFO itemInfo);
	public: void CSession::SetToExchangeList(ITEM_INFO itemInfo);
	public: bool CSession::IsExistIndexInMyChangeList(int index);
	public: bool CSession::MoveItemToExchangeList(ITEM_INFO itemInfo);
	public: void CSession::CancelExchange(void);
	//public: int CSession::GetNumOtherExchangeItems();
	public: void CSession::ClearOtherExchangeItemList(void);
	//public: int CSession::IsOtherExchangeItemListFull();
	//public: void CSession::SetMyExchangeMoney(int);
	//public: void CSession::SetOtherExchangeMoney(int);
	//public: void CSession::AddToOtherExchangeList(struct ITEM_INFO);
	//public: void CSession::SetToOtherExchangeList(struct ITEM_INFO);
	//public: int GetMyExchangeMoney();
	//public: int GetOtherExchangeMoney();
	public: void CSession::CancelExchangeNoRefresh(void);
	//public: struct ITEM_INFO CSession::GetExchangeItemInfo(int);
	//public: struct ITEM_INFO CSession::GetOtherExchangeItemInfo(int);
	public: void CSession::ClearFriend(void);
	public: int CSession::GetNumFriend(void);
	public: FRIEND_INFO CSession::GetFriendInfoBySequence(int sequence);
	public: void CSession::ClearParty(void);
	public: int CSession::GetNumParty(void);
	public: void CSession::RefreshPartyUI(void);
	public: FRIEND_INFO CSession::GetPartyInfoByAid(unsigned long aid);
	public: void CSession::AddMemberToParty(FRIEND_INFO& info);
	public: FRIEND_INFO CSession::GetPartyInfoBySequence(int sequence);
	public: FRIEND_INFO CSession::GetPartyInfoByName(const char* name);
	//public: void CSession::ChangeRoleFromParty(unsigned long, int);
	public: void CSession::DeleteMemberFromParty(const char* characterName);
	public: unsigned long CSession::GetMemberAidFromParty(const char* characterName);
	public: int CSession::GetWeaponType(int itemID);
	//public: int CSession::MakeWeaponType(int, int);
	public: const char* CSession::GetShortenItemName(int slot);
	//public: void CSession::SetShortenItemName(const char *, int);
	public: int CSession::GetSex(void);
	public: void CSession::SetSex(int sex);
	public: unsigned long CSession::GetAid(void);
	public: unsigned long CSession::GetGid(void);
	public: void CSession::SetAid(unsigned long aid);
	public: void CSession::SetGid(unsigned long gid);
	public: int CSession::GetJob(void);
	public: int CSession::GetExp(void);
	//public: int GetStr();
	//public: int GetAgi();
	//public: int GetVit();
	//public: int GetInt();
	//public: int GetDex();
	//public: int GetLuk();
	//public: int GetGold();
	//public: int GetHonor();
	//public: int GetLevel();
	//public: int GetPoint();
	public: int CSession::GetSpeed(void);
	//public: int GetJobexp();
	public: int CSession::GetWeight(void);
	//public: int GetVirtue();
	public: int CSession::GetNextExp(void);
	//public: int GetPlusStr();
	//public: int GetPlusAgi();
	//public: int GetPlusVit();
	//public: int GetPlusInt();
	//public: int GetPlusDex();
	//public: int GetPlusLuk();
	//public: int GetJoblevel();
	public: int CSession::GetMaxWeight(void);
	//public: int GetJobNextexp();
	//public: int GetSkillPoint();
	//public: int GetASPD();
	//public: int GetPlusASPD();
	//public: int GetAttPower();
	//public: int GetMdefPower();
	//public: int GetItemDefPower();
	//public: int GetPlusdefPower();
	//public: int GetRefiningPower();
	//public: int GetMax_mattPower();
	//public: int GetMin_mattPower();
	//public: int GetPlusmdefPower();
	public: int CSession::GetEquipArrowIndex(void);
	//public: int GetHitSuccessValue();
	//public: int GetAvoidSuccessValue();
	//public: int GetCriticalSuccessValue();
	//public: int GetPlusAvoidSuccessValue();
	public: const char* CSession::GetCharName(void);
	//public: int CSession::GetEffectIgnoreCnt(int);
	//public: void CSession::SetCharName(const char *);
	public: void CSession::SetTextType(bool isShorten, bool isBold);
	//public: char * CSession::GetStateFileName(int, int);
	public: int CSession::Encode(int number, int encodeValue);
	public: int CSession::Decode(int number, int decodeValue);
	public: void CSession::ChangeXorValue(void);
	public: void CSession::SetHp(int hp);
	public: void CSession::SetMaxhp(int maxhp);
	public: void CSession::SetSp(int sp);
	public: void CSession::SetMaxsp(int maxsp);
	public: int CSession::GetHp(void);
	public: int CSession::GetSp(void);
	public: int CSession::GetMaxhp(void);
	public: int CSession::GetMaxsp(void);
	//public: const int * GetExpPointer();
	//public: const int * GetJobexpPointer();
	//public: const int * GetNextExpPointer();
	//public: const int * GetJobnextexpPointer();
	//public: const int * GetStandardStrPointer();
	//public: const int * GetStandardAgiPointer();
	//public: const int * GetStandardVitPointer();
	//public: const int * GetStandardIntPointer();
	//public: const int * GetStandardDexPointer();
	//public: const int * GetStandardLukPointer();
	public: void CSession::InvalidateUI(void);
	public: void CSession::InvalidateJob(void);
	public: void CSession::InvalidateBasicWnd(void);
	public: void CSession::SetStr(int str);
	public: void CSession::SetAgi(int agi);
	public: void CSession::SetVit(int vit);
	public: void CSession::SetInt(int int_);
	public: void CSession::SetDex(int dex);
	public: void CSession::SetLuk(int luk);
	public: void CSession::SetExp(int exp);
	public: void CSession::SetLevel(int level);
	public: void CSession::SetPoint(int point);
	public: void CSession::SetPlusStr(int plusstr);
	public: void CSession::SetPlusAgi(int plusagi);
	public: void CSession::SetPlusVit(int plusvit);
	public: void CSession::SetPlusInt(int plusint);
	public: void CSession::SetPlusDex(int plusdex);
	public: void CSession::SetPlusLuk(int plusluk);
	public: void CSession::SetSkillPoint(int skillpoint);
	public: void CSession::SetNextexp(int nextexp);
	public: void CSession::SetStandardStr(int str);
	public: void CSession::SetStandardAgi(int agi);
	public: void CSession::SetStandardVit(int vit);
	public: void CSession::SetStandardInt(int int_);
	public: void CSession::SetStandardDex(int dex);
	public: void CSession::SetStandardLuk(int luk);
	public: void CSession::SetJob(int job);
	public: void CSession::SetJoblevel(int joblevel);
	//public: void SetGuildSkillPoint(int);
	//public: void SetGoldNoRefresh(int);
	public: void CSession::SetGold(int gold);
	public: void CSession::SetJobexp(int jobexp);
	public: void CSession::SetSpeed(int speed);
	public: void CSession::SetHonor(int honor);
	public: void CSession::SetWeight(int weight);
	public: void CSession::SetVirtue(int virtue);
	public: void CSession::SetJobnextexp(int jobnextexp);
	public: void CSession::SetMaxWeight(int maxweight);
	public: void CSession::SetAttPower(int attpower);
	public: void CSession::SetMdefPower(int mdefpower);
	public: void CSession::SetItemDefPower(int itemdefpower);
	public: void CSession::SetPlusdefPower(int plusdefpower);
	public: void CSession::SetRefiningPower(int refiningpower);
	public: void CSession::SetMax_mattPower(int mattpower);
	public: void CSession::SetMin_mattPower(int mattpower);
	public: void CSession::SetASPD(int aspd);
	public: void CSession::SetPlusASPD(int plusaspd);
	public: void CSession::SetPlusmdefPower(int plusmdefpower);
	public: void CSession::SetHitSuccessValue(int hitsuccessvalue);
	public: void CSession::SetAvoidSuccessValue(int avoidsuccessvalue);
	public: void CSession::SetCriticalSuccessValue(int criticalsuccessvalue);
	public: void CSession::SetPlusAvoidSuccessValue(int plusavoidsuccessvalue);
	public: unsigned long CSession::GetPartyColorBySeq(int seq);
	public: void CSession::SetEquipArrowIndwx(int value);
	public: ITEM_INFO CSession::GetEquipedItems(int wearLocation);
	public: TALKTYPE CSession::GetNoParamTalkType(const char* command);
	public: bool CSession::IsSecondAttack(int job, int sex, int weapon);
	public: float CSession::GetPCAttackMotion(int job, int sex, int weapon, int isSecondAttack);
	public: float CSession::GetShadowFactorWithJob(int job);
	public: bool CSession::IsProperWeapon(int job, int weapon);
	//public: int IsItemSnap();
	//public: int IsMonsterSnap();
	//public: void CSession::RefreshMouseSnapState(int);
	//public: const char * CSession::GetRmaName(int);
	//public: const char * CSession::GetW3DName(int);
	//public: unsigned char CSession::IsHaveAnotherPalette(int, char *);
	public: const char* CSession::GetBodyPaletteName(int job, int sex, int palNum, char* buf);
	public: const char* CSession::GetHeadPaletteName(int head, int job, int sex, int palNum, char* buf);
	public: const char* CSession::GetJobName(int job);
	//public: void CSession::ReLoadAlwaysNeededRes();
	public: void CSession::PreLoadAlwaysNeededRes(void);
	public: int CSession::GetShieldType(int ShieldId);
	//public: int CSession::IsProperShield(int, int);
	public: void CSession::RerecordProhibitLog(void);
	//public: void CSession::PrintNumber(class CFile *, unsigned long);
	//public: void CSession::InitChattingProhibitLog();
	public: void CSession::DeleteAssignAID(unsigned long AID);
	public: void CSession::EraseProhibit(unsigned long AID, unsigned long prohibitTime);
	public: void CSession::AppendProhibit(unsigned long AID, unsigned long prohibitTime);
	//public: int CSession::GetChatProhibittedCnt(char *);
	//public: int CSession::GetChatProhibittedCnt(unsigned long);
	//public: void SetSelectedServerName(const char *);
	//public: const char * GetSelectedServerName();
	//public: const char * CSession::GetItemResName_WithId(const char *, int);
	public: COLORREF CSession::GetItemDisColor(ITEM_INFO* itemInfo);
	public: bool CSession::GetEmblemState(void);
	public: void CSession::GetEmblemFileName(char* buffer, int gdid, int version);
	public: void CSession::SetEmblemState(bool emblemState);
	public: void CSession::SetCompressedEmblemImage(const char* compressedEmblemImage, unsigned long emblemLen, int GDID, int emblemVersion);
	public: void CSession::InitShortCutTextFromReg(void);
	public: int CSession::IsKorean(void);
	public: int CSession::IsPc(int job);
	public: int CSession::IsSiegeMode(void);
	//public: int CSession::IsAttack(int);
	//public: int CSession::IsMyParty(int);
	public: int CSession::IsMonster(int job);
	public: int CSession::IsMyGuild(int gdid);
	public: int CSession::IsGuardian(int job);
	public: int CSession::IsPetEgg(int itemId);
	public: int CSession::IsMasterAid(int showLevel);
	//public: int CSession::IsExistEffectState(int);
	public: void CSession::InitPetTables(void);
	public: void CSession::InitPetTalkTable(void);
	//public: void CSession::GetPetSpeak(int, int, int, char *);
	public: void CSession::GetMonsterSkillInfo(char* Name, int skillId, int& act, int& loopType);
	//public: void CSession::GetMonsterTalkInfo(int, int, int, char *, unsigned long);
	//public: void CSession::GetPetHungryStateText(int, char *);
	//public: void CSession::GetPetFriendlyStateText(int, char *);
	//public: void CSession::GetPetIllustName(int, int, char *);
	//public: void CSession::GetPetTalkString(char *, char *, int, int);
	//public: char * CSession::GetPetName(int);
	//public: char * CSession::GetPetActText(int);
	public: char* CSession::GetPetAccActName(int accId);
	//public: char * CSession::GetPetHungryText(int);
	public: int CSession::GetPetHungryState(int Hunger);
	public: int CSession::GetPetFriendlyState(int Friendly);
	public: int CSession::GetPetTalkNumber(int job, int act, int hungry);
	//public: int GetPetEmotion(int, int, int);
	//public: class CGameActor * CSession::GetGameActorByAid(unsigned long);
	//public: char * CSession::GetStateName(int);
	//public: unsigned long CSession::GetForceAnimEndTick(unsigned long);
	public: void CSession::SetForceAnimEndTick(unsigned long AID, unsigned long tick);
	public: int CSession::IsEFST_TrickDead(void);
	public: int CSession::IsEFST_Berserk(void);

private:
	static hook_method<void (CSession::*)(void)> CSession::_Init;
	static hook_method<void (CSession::*)(void)> CSession::_Create;
	static hook_method<void (CSession::*)(void)> CSession::_InitTable;
	static hook_method<void (CSession::*)(void)> CSession::_InitLanguageTable;
	static hook_method<void (CSession::*)(void)> CSession::_InitVariables;
	static hook_method<void (CSession::*)(void)> CSession::_InitPcNameTable;
	static hook_method<void (CSession::*)(void)> CSession::_InitJobNameTable;
	static hook_method<void (CSession::*)(void)> CSession::_InitTalkTypeTable;
	static hook_method<int (CSession::*)(void)> CSession::_IsEnableSiegeMode;
	static hook_method<int (CSession::*)(void)> CSession::_InitMapNameTable;
	static hook_method<int (CSession::*)(void)> CSession::_InitMp3NameTable;
	static hook_method<int (CSession::*)(void)> CSession::_InitIndoorRswTable;
	static hook_method<int (CSession::*)(void)> CSession::_InitEnableObjLightMapTable;
	static hook_method<void (CSession::*)(void)> CSession::_RefreshSkillItemWnd;
	static hook_method<bool (CSession::*)(SKILL_INFO& skillInfo, bool needRefresh)> CSession::_AddSkillItem;
	static hook_method<SKILL_INFO (CSession::*)(int id)> CSession::_GetSkillItemInfoBySkillId;
	static hook_method<SKILL_INFO (CSession::*)(int sequence)> CSession::_GetSkillItemInfoBySequence;
	static hook_method<SKILL_INFO (CSession::*)(const char* skillName)> CSession::_GetSkillItemInfoByName;
	static hook_method<bool (CSession::*)(SKILL_INFO& skillInfo)> CSession::_AddTempSkillItem;
	static hook_method<SKILL_INFO (CSession::*)(int skillId)> CSession::_GetTempSkillItemInfoBySkillId;
	static hook_method<int (CSession::*)(int slot)> CSession::_GetShortenSkillUseLevel;
	static hook_method<void (CSession::*)(int skillUseLevel, int slot)> CSession::_SetShortenSkillUseLevel2;
	static hook_method<void (CSession::*)(void)> CSession::_InitSkillEffectIdTable;
	static hook_method<int (CSession::*)(void)> CSession::_InitSkillUseAfterDelayTable;
	static hook_method<void (CSession::*)(const char* itemName, char* buf)> CSession::_GetSkillBitmapFileName;
	static hook_method<const char* (CSession::*)(const char* itemName)> CSession::_GetItemSpriteFileName_Skill;
	static hook_method<void (CSession::*)(void)> CSession::_InitWithClear;
	static hook_method<void (CSession::*)(void)> CSession::_InitJobHitWaveName;
	static hook_method<int (CSession::*)(void)> CSession::_InitFogParameterTable;
	static hook_method<void (CSession::*)(void)> CSession::_InitWeaponHitWaveName;
	static hook_method<void (CSession::*)(void)> CSession::_InitShadowFactorWithJob;
	static hook_method<void (CSession::*)(void)> CSession::_InitWeaponSwingWaveName;
	static hook_method<void (CSession::*)(void)> CSession::_WriteOptionToRegistry;
	static hook_method<void (CSession::*)(void)> CSession::_WriteExListToRegistry;
	static hook_method<void (CSession::*)(void)> CSession::_InitExListWithRegistry;
	static hook_method<void (CSession::*)(void)> CSession::_InitOptionWithRegistry;
	static hook_method<void (CSession::*)(void)> CSession::_InitWhenServerMove;
	static hook_method<unsigned long (CSession::*)(void)> CSession::_GetServerTime;
	static hook_method<void (CSession::*)(unsigned long startTime)> CSession::_SetServerTime;
	static hook_method<bool (CSession::*)(const char* chat)> CSession::_IsOnlyEnglish;
	static hook_method<void (CSession::*)(unsigned long startTime)> CSession::_UpdateServerTime;
	static hook_method<void (CSession::*)(unsigned long pingTime)> CSession::_RecalcAveragePingTime;
	static hook_method<void (CSession::*)(int x, int y, int dir)> CSession::_SetPlayerPosDir;
	static hook_method<bool (CSession::*)(const char* chat)> CSession::_IsBadNameWithSpaceChar;
	static hook_method<int (CSession::*)(const char* chatBuf, TALKTYPE* talkType, mystd::string* const param)> CSession::_GetTalkType;
	static hook_method<void (CSession::*)(void)> CSession::_ClearPlusValue;
	static hook_method<const char* (CSession::*)(const char* msg, char* buf)> CSession::_RemoveUnderbar;
	static hook_method<void (CSession::*)(void)> CSession::_DeleteAllExNameList;
	static hook_method<void (CSession::*)(const char* exName)> CSession::_AddToExNameList;
	static hook_method<void (CSession::*)(const char* exName)> CSession::_DeleteFromExNameList;
	static hook_method<int (CSession::*)(unsigned long aid)> CSession::_IsExAid;
	static hook_method<void (CSession::*)(void)> CSession::_DeleteAllExAidList;
	static hook_method<void (CSession::*)(unsigned long aid)> CSession::_AddToExAidList;
	static hook_method<void (CSession::*)(unsigned long aid)> CSession::_DeleteFromExAidList;
	static hook_method<mystd::list<mystd::string>& (CSession::*)(void)> CSession::_GetNumExNameList;
	static hook_method<const char* (CSession::*)(int attr)> CSession::_GetAttrWaveName;
	static hook_method<const char* (CSession::*)(int job)> CSession::_GetJobHitWaveName;
	static hook_method<const char* (CSession::*)(const char* rswName)> CSession::_GetMp3Name;
	static hook_method<const char* (CSession::*)(const char* rswName)> CSession::_GetMapName;
	static hook_method<const char* (CSession::*)(int weapon)> CSession::_GetWeaponHitWaveName;
	static hook_method<const char* (CSession::*)(int weapon)> CSession::_GetWeaponSwingWaveName;
	static hook_method<const char* (CSession::*)(const char* gatName)> CSession::_GatName2RswName;
	static hook_method<const char* (CSession::*)(const char* itemName, int isIdentified)> CSession::_GetItemSpriteFileName;
	static hook_method<bool (CSession::*)(const char* rswName)> CSession::_IsIndoorRswName;
	static hook_method<bool (CSession::*)(const char* rswName)> CSession::_IsEnableObjLightMap;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumItem;
	static hook_method<bool (CSession::*)(JOBTYPE jobType)> CSession::_IsVisibleNPC;
	static hook_method<ITEM_INFO (CSession::*)(int id)> CSession::_GetItemInfoById;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetItemInfoBySequence;
	static hook_method<char* (CSession::*)(int job, int sex, char* buf)> CSession::_GetJobActName;
	static hook_method<char* (CSession::*)(int job, int sex, char* buf)> CSession::_GetJobSprName;
	static hook_method<char* (CSession::*)(int job, int head, int sex, char* buf)> CSession::_GetImfName;
	static hook_method<char* (CSession::*)(int job, int& head, int sex, char* buf)> CSession::_GetHeadActName;
	static hook_method<char* (CSession::*)(int job, int& head, int sex, char* buf)> CSession::_GetHeadSprName;
	static hook_method<char* (CSession::*)(int job, int sex, int shield, char* buf)> CSession::_GetShieldActName;
	static hook_method<char* (CSession::*)(int job, int sex, int shield, char* buf)> CSession::_GetShieldSprName;
	static hook_method<char* (CSession::*)(int job, int& head, int sex, int accessory, char* buf)> CSession::_GetAccessoryActName;
	static hook_method<char* (CSession::*)(int job, int& head, int sex, int accessory, char* buf)> CSession::_GetAccessorySprName;
	static hook_method<void (CSession::*)(ITEM_INFO* itemInfo)> CSession::_SetItem;
	static hook_method<bool (CSession::*)(ITEM_INFO* itemInfo)> CSession::_AddItem;
	static hook_method<void (CSession::*)(unsigned long index, int numItem)> CSession::_DecItem;
	static hook_method<bool (CSession::*)(ITEM_INFO* itemInfo)> CSession::_AddEquipItem;
	static hook_method<bool (CSession::*)(ITEM_INFO* itemInfo)> CSession::_AddItemNoRefresh;
	static hook_method<bool (CSession::*)(int itemIndex)> CSession::_IsValidItemIndexInEquiped;
	static hook_method<bool (CSession::*)(int itemIndex)> CSession::_IsValidItemIndexInUnequiped;
	static hook_method<bool (CSession::*)(int wearLocation)> CSession::_MoveItemFromEquipWndToItemWnd;
	static hook_method<void (CSession::*)(int wearLocation, int* slotNum)> CSession::_BitMaskToSlotNum;
	static hook_method<void (CSession::*)(void)> CSession::_ClearItem;
	static hook_method<void (CSession::*)(void)> CSession::_ClearShopItem;
	static hook_method<void (CSession::*)(void)> CSession::_ClearDealItems;
	static hook_method<void (CSession::*)(void)> CSession::_ClearEquipItem;
	static hook_method<void (CSession::*)(void)> CSession::_ClearEquipItemInInventory;
	static hook_method<void (CSession::*)(void)> CSession::_ClearMerchantMyShopItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumMerchantShopItem;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetMerchantShopItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearPurchaseItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumPurchaseItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetPurchaseItemTotalPrice;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetPurchaseItemInfoBySequence;
	static hook_method<ITEM_INFO (CSession::*)(const char* itemName)> CSession::_GetPurchaseItemInfoByName;
	static hook_method<void (CSession::*)(void)> CSession::_ClearMerchantPurchaseItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumMerchantPurchaseItem;
	static hook_method<void (CSession::*)(ITEM_INFO& itemInfo)> CSession::_AddMerchantPurchaseItem;
	static hook_method<void (CSession::*)(ITEM_INFO& itemInfo)> CSession::_DecMerchantPurchaseItem;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetMerchantPurchaseItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_CloneMerchantPurchaseItemToMerchantPurchaseItemSaved;
	static hook_method<ITEM_INFO (CSession::*)(const char* itemName)> CSession::_GetMerchantPurchaseItemInfoByName;
	static hook_method<void (CSession::*)(void)> CSession::_ClearSellItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumSellItem;
	static hook_method<int (CSession::*)(void)> CSession::_IsSellItemValid;
	static hook_method<void (CSession::*)(ITEM_INFO& itemInfo)> CSession::_AddSellItem;
	static hook_method<void (CSession::*)(ITEM_INFO& itemInfo)> CSession::_DecSellItem;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetSellItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetSellItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearStoreItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumStoreItem;
	static hook_method<void (CSession::*)(void)> CSession::_RefreshStoreItemWnd;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_AddStoreItem;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_DecStoreItem;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetStoreItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetStoreItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearMerchantItem;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetMerchantItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetMerchantItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearMerchantMirrorItem;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_AddMerchantMirrorItem;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_DecMerchantMirrorItem;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetMerchantMirrorItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetMerchantMirrorItemInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearMerchantHopeToSellItem;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumMerchantHopeToSellItem;
	static hook_method<int (CSession::*)(int itemIndex)> CSession::_GetMerchantHopeToSellItemNum;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_AddMerchantHopeToSellItem;
	static hook_method<bool (CSession::*)(ITEM_INFO& itemInfo)> CSession::_DecMerchantHopeToSellItem;
	static hook_method<ITEM_INFO (CSession::*)(int index)> CSession::_GetMerchantHopeToSellItemInfoByIndex;
	static hook_method<ITEM_INFO (CSession::*)(int sequence)> CSession::_GetMerchantHopeToSellItemInfoBySequence;
	static hook_method<void (CSession::*)(int sequence, int price)> CSession::_SetMerchantHopeToSellItemPrice;
	static hook_method<void (CSession::*)(void)> CSession::_ClearExchangeItemList;
	static hook_method<int (CSession::*)(void)> CSession::_IsExchangeItemListFull;
	static hook_method<int (CSession::*)(void)> CSession::_GetFilledExchangeItemList;
	static hook_method<void (CSession::*)(ITEM_INFO itemInfo)> CSession::_AddToExchangeList;
	static hook_method<void (CSession::*)(ITEM_INFO itemInfo)> CSession::_SetToExchangeList;
	static hook_method<bool (CSession::*)(int index)> CSession::_IsExistIndexInMyChangeList;
	static hook_method<bool (CSession::*)(ITEM_INFO itemInfo)> CSession::_MoveItemToExchangeList;
	static hook_method<void (CSession::*)(void)> CSession::_CancelExchange;
	static hook_method<void (CSession::*)(void)> CSession::_ClearOtherExchangeItemList;
	static hook_method<void (CSession::*)(void)> CSession::_CancelExchangeNoRefresh;
	static hook_method<void (CSession::*)(void)> CSession::_ClearFriend;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumFriend;
	static hook_method<FRIEND_INFO (CSession::*)(int sequence)> CSession::_GetFriendInfoBySequence;
	static hook_method<void (CSession::*)(void)> CSession::_ClearParty;
	static hook_method<int (CSession::*)(void)> CSession::_GetNumParty;
	static hook_method<void (CSession::*)(void)> CSession::_RefreshPartyUI;
	static hook_method<FRIEND_INFO (CSession::*)(unsigned long aid)> CSession::_GetPartyInfoByAid;
	static hook_method<void (CSession::*)(FRIEND_INFO& info)> CSession::_AddMemberToParty;
	static hook_method<FRIEND_INFO (CSession::*)(int sequence)> CSession::_GetPartyInfoBySequence;
	static hook_method<FRIEND_INFO (CSession::*)(const char* name)> CSession::_GetPartyInfoByName;
	static hook_method<void (CSession::*)(const char* characterName)> CSession::_DeleteMemberFromParty;
	static hook_method<unsigned long (CSession::*)(const char* characterName)> CSession::_GetMemberAidFromParty;
	static hook_method<int (CSession::*)(int itemID)> CSession::_GetWeaponType;
	static hook_method<const char* (CSession::*)(int slot)> CSession::_GetShortenItemName;
	static hook_method<int (CSession::*)(void)> CSession::_GetSex;
	static hook_method<void (CSession::*)(int sex)> CSession::_SetSex;
	static hook_method<unsigned long (CSession::*)(void)> CSession::_GetAid;
	static hook_method<unsigned long (CSession::*)(void)> CSession::_GetGid;
	static hook_method<void (CSession::*)(unsigned long aid)> CSession::_SetAid;
	static hook_method<void (CSession::*)(unsigned long gid)> CSession::_SetGid;
	static hook_method<int (CSession::*)(void)> CSession::_GetJob;
	static hook_method<int (CSession::*)(void)> CSession::_GetWeight;
	static hook_method<int (CSession::*)(void)> CSession::_GetMaxWeight;
	static hook_method<int (CSession::*)(void)> CSession::_GetEquipArrowIndex;
	static hook_method<const char* (CSession::*)(void)> CSession::_GetCharName;
	static hook_method<void (CSession::*)(bool isShorten, bool isBold)> CSession::_SetTextType;
	static hook_method<int (CSession::*)(int number, int encodeValue)> CSession::_Encode;
	static hook_method<int (CSession::*)(int number, int decodeValue)> CSession::_Decode;
	static hook_method<void (CSession::*)(void)> CSession::_ChangeXorValue;
	static hook_method<void (CSession::*)(int hp)> CSession::_SetHp;
	static hook_method<void (CSession::*)(int maxhp)> CSession::_SetMaxhp;
	static hook_method<void (CSession::*)(int sp)> CSession::_SetSp;
	static hook_method<void (CSession::*)(int maxsp)> CSession::_SetMaxsp;
	static hook_method<int (CSession::*)(void)> CSession::_GetHp;
	static hook_method<int (CSession::*)(void)> CSession::_GetSp;
	static hook_method<int (CSession::*)(void)> CSession::_GetMaxhp;
	static hook_method<int (CSession::*)(void)> CSession::_GetMaxsp;
	static hook_method<void (CSession::*)(void)> CSession::_InvalidateUI;
	static hook_method<void (CSession::*)(void)> CSession::_InvalidateJob;
	static hook_method<void (CSession::*)(void)> CSession::_InvalidateBasicWnd;
	static hook_method<void (CSession::*)(int str)> CSession::_SetStr;
	static hook_method<void (CSession::*)(int agi)> CSession::_SetAgi;
	static hook_method<void (CSession::*)(int vit)> CSession::_SetVit;
	static hook_method<void (CSession::*)(int int_)> CSession::_SetInt;
	static hook_method<void (CSession::*)(int dex)> CSession::_SetDex;
	static hook_method<void (CSession::*)(int luk)> CSession::_SetLuk;
	static hook_method<void (CSession::*)(int exp)> CSession::_SetExp;
	static hook_method<void (CSession::*)(int level)> CSession::_SetLevel;
	static hook_method<void (CSession::*)(int point)> CSession::_SetPoint;
	static hook_method<void (CSession::*)(int skillpoint)> CSession::_SetSkillPoint;
	static hook_method<void (CSession::*)(int job)> CSession::_SetJob;
	static hook_method<void (CSession::*)(int joblevel)> CSession::_SetJoblevel;
	static hook_method<void (CSession::*)(int gold)> CSession::_SetGold;
	static hook_method<void (CSession::*)(int jobexp)> CSession::_SetJobexp;
	static hook_method<void (CSession::*)(int speed)> CSession::_SetSpeed;
	static hook_method<void (CSession::*)(int honor)> CSession::_SetHonor;
	static hook_method<void (CSession::*)(int weight)> CSession::_SetWeight;
	static hook_method<void (CSession::*)(int virtue)> CSession::_SetVirtue;
	static hook_method<void (CSession::*)(int maxweight)> CSession::_SetMaxWeight;
	static hook_method<unsigned long (CSession::*)(int seq)> CSession::_GetPartyColorBySeq;
	static hook_method<void (CSession::*)(int value)> CSession::_SetEquipArrowIndwx;
	static hook_method<ITEM_INFO (CSession::*)(int wearLocation)> CSession::_GetEquipedItems;
	static hook_method<TALKTYPE (CSession::*)(const char* command)> CSession::_GetNoParamTalkType;
	static hook_method<bool (CSession::*)(int job, int sex, int weapon)> CSession::_IsSecondAttack;
	static hook_method<float (CSession::*)(int job, int sex, int weapon, int isSecondAttack)> CSession::_GetPCAttackMotion;
	static hook_method<float (CSession::*)(int job)> CSession::_GetShadowFactorWithJob;
	static hook_method<bool (CSession::*)(int job, int weapon)> CSession::_IsProperWeapon;
	static hook_method<const char* (CSession::*)(int job, int sex, int palNum, char* buf)> CSession::_GetBodyPaletteName;
	static hook_method<const char* (CSession::*)(int head, int job, int sex, int palNum, char* buf)> CSession::_GetHeadPaletteName;
	static hook_method<const char* (CSession::*)(int job)> CSession::_GetJobName;
	static hook_method<void (CSession::*)(void)> CSession::_PreLoadAlwaysNeededRes;
	static hook_method<void (CSession::*)(void)> CSession::_RerecordProhibitLog;
	static hook_method<void (CSession::*)(unsigned long AID)> CSession::_DeleteAssignAID;
	static hook_method<void (CSession::*)(unsigned long AID, unsigned long prohibitTime)> CSession::_EraseProhibit;
	static hook_method<void (CSession::*)(unsigned long AID, unsigned long prohibitTime)> CSession::_AppendProhibit;
	static hook_method<bool (CSession::*)(void)> CSession::_GetEmblemState;
	static hook_method<void (CSession::*)(char* buffer, int gdid, int version)> CSession::_GetEmblemFileName;
	static hook_method<void (CSession::*)(bool emblemState)> CSession::_SetEmblemState;
	static hook_method<void (CSession::*)(const char* compressedEmblemImage, unsigned long emblemLen, int GDID, int emblemVersion)> CSession::_SetCompressedEmblemImage;
	static hook_method<void (CSession::*)(void)> CSession::_InitShortCutTextFromReg;
	static hook_method<int (CSession::*)(void)> CSession::_IsKorean;
	static hook_method<int (CSession::*)(int job)> CSession::_IsPc;
	static hook_method<int (CSession::*)(void)> CSession::_IsSiegeMode;
	static hook_method<int (CSession::*)(int job)> CSession::_IsMonster;
	static hook_method<int (CSession::*)(int gdid)> CSession::_IsMyGuild;
	static hook_method<int (CSession::*)(int job)> CSession::_IsGuardian;
	static hook_method<int (CSession::*)(int itemId)> CSession::_IsPetEgg;
	static hook_method<int (CSession::*)(int showLevel)> CSession::_IsMasterAid;
	static hook_method<void (CSession::*)(void)> CSession::_InitPetTables;
	static hook_method<void (CSession::*)(void)> CSession::_InitPetTalkTable;
	static hook_method<void (CSession::*)(char* Name, int skillId, int& act, int& loopType)> CSession::_GetMonsterSkillInfo;
	static hook_method<char* (CSession::*)(int accId)> CSession::_GetPetAccActName;
	static hook_method<int (CSession::*)(int Hunger)> CSession::_GetPetHungryState;
	static hook_method<int (CSession::*)(int Friendly)> CSession::_GetPetFriendlyState;
	static hook_method<int (CSession::*)(int job, int act, int hungry)> CSession::_GetPetTalkNumber;
	static hook_method<void (CSession::*)(unsigned long AID, unsigned long tick)> CSession::_SetForceAnimEndTick;
	static hook_method<int (CSession::*)(void)> CSession::_IsEFST_TrickDead;
	static hook_method<int (CSession::*)(void)> CSession::_IsEFST_Berserk;
};


bool __cdecl IsEffectStateNothing(unsigned long effectState);
bool __cdecl IsEffectStateSight(unsigned long effectState);
bool __cdecl IsEffectStateRuwach(unsigned long effectState);
bool __cdecl IsEffectStateBurrow(unsigned long effectState);
bool __cdecl IsEffectStateHiding(unsigned long effectState);
bool __cdecl IsEffectStatePushCart(unsigned long effectState);
bool __cdecl IsEffectStateBird(unsigned long effectState);
bool __cdecl IsEffectStateChicken(unsigned long effectState);
bool __cdecl IsEffectStateSpecialHiding(unsigned long effectState);
bool __cdecl IsEffectStateOrcFace(unsigned long effectState);
bool __cdecl IsEffectStateMarried(unsigned long effectState);
bool __cdecl IsEffectStateFootPrint(unsigned long effectState);
bool __cdecl IsEffectStateSightChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateRuwachChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateBurrowChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateHidingChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStatePushCartChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateBirdChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateChickenChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateSpecialHidingChanged(unsigned int effectState, unsigned int oldEffectState);
bool __cdecl IsEffectStateOrcFaceChanged(unsigned int effectState, unsigned int oldEffectState);
void __cdecl SetEffectStateSpecialHiding(unsigned long* effectState);
void __cdecl ClearEffectStateSpecialHiding(unsigned long* effectState);
